﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;

namespace GrafosWindows.Model
{
    public class Vertice
    {
        public enum Cores { BRANCO, CINZA, PRETO };

        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private List<Vertice> _vizinhos;
        public List<Vertice> Vizinhos
        {
            get { return _vizinhos; }
            set { _vizinhos = value; }
        }
        private List<Aresta> _arestas;
        public List<Aresta> Arestas
        {
            get { return _arestas; }
            set { _arestas = value; }
        }
        private Cores _cor;
        public Cores Cor
        {
            get { return _cor; }
            set { _cor = value; }
        }
        private Point _posicao;
        public Point Posicao
        {
            get { return _posicao; }
            set { _posicao = value; }
        }
        public int Cardinalidade
        {
            get { return Vizinhos.Count; }
        }
        private Vertice _antecessor;
        public Vertice Antecessor
        {
            get { return _antecessor; }
            set { _antecessor = value; }
        }
        private int _distancia;
        public int Distancia
        {
            get { return _distancia; }
            set { _distancia = value; }
        }
        private int _distanciaAcumulado;
        public int DistanciaAcumulado
        {
            get { return _distanciaAcumulado; }
            set { _distanciaAcumulado = value; }
        }

        public Vertice() : this("")
        {
        }

        public Vertice(string name)
        {
            this.Name = name;

            Vizinhos = new List<Vertice>();
            Arestas = new List<Aresta>();

            Cor = Cores.BRANCO;
            Antecessor = null;
            Distancia = int.MaxValue;
            DistanciaAcumulado = int.MaxValue;
        }

        public override bool Equals(object obj)
        {
            if (obj is Vertice)
            {
                Vertice vertice = (Vertice)obj;
                return vertice.Name.Equals(this.Name);
            }
            return false;
        }

        public override string ToString()
        {
            return Name;
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

    }
}
